package adminModels

import (
	"appService/src/application/app/appModels"
	"errors"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/util/gvalid"
	"xorm.io/builder"
	"xorm.io/xorm"
)

//部门机构
type Branch struct {
	Id                 string           `json:"id" xorm:"varchar(128) pk notnull unique"`        //id guid
	Pid                string           `json:"pid" xorm:"varchar(128)"`                         //父ID
	BranchName         string           `json:"branch_name" xorm:"varchar(255)"`                 //部门机构名称
	IsDefault          int              `json:"is_default" xorm:"tinyint(1) notnull default(2)"` //是否默认账户 1 是  2不是
	Roles              []BranchRoles    `json:"roles" xorm:"text json"`                          //部门机构拥有角色列表
	Sort               int              `json:"sort" xorm:"int notnull default(1)"`              //排序
	appModels.MTime    `xorm:"extends"` //继承更新创建等 时间字段
	appModels.MVersion `xorm:"extends"` //继承乐观锁字段
}

type BranchRoles struct {
	AuthGroupId string   `json:"auth_group_id"`          //权限组ID
	Roles       []string `json:"roles" xorm:"text json"` //部门机构拥有角色列表
}

//添加数据校验
func (this *Branch) AddValid() error {
	rules := []string{
		"Id@required#ID不能为空",
		"BranchName@required#部门机构名称不能为空",
	}
	err := gvalid.CheckStruct(this, rules, nil)
	if err == nil {
		return nil
	} else {
		return errors.New(err.FirstString())
	}
}

//修改数据校验
func (this *Branch) EditValid() error {
	rules := []string{
		"Id@required#ID不能为空",
		"BranchName@required#部门机构名称不能为空",
	}
	err := gvalid.CheckStruct(this, rules, nil)
	if err == nil {
		return nil
	} else {
		return errors.New(err.FirstString())
	}
}

//获取模型
func (this *Branch) Model() interface{} {
	return new(Branch)
}

//获取模型切片
func (this *Branch) Slice() interface{} {
	return new([]Branch)
}

//初始化数据
func (this *Branch) Init(db *xorm.Session, guid string, loginUser *appModels.UserInfo) error {
	this.Id = guid
	this.IsDefault = 2
	return nil
}

//添加之前调用，判断是否可添加，设置添加条件等
func (this *Branch) AddWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	return nil
}

//删除之前调用，判断是否可删除，设置删除条件等
func (this *Branch) DeleteWhere(db *xorm.Session, loginUser *appModels.UserInfo, ids ...string) error {
	for _, id := range ids {
		has, err := db.Where(builder.Eq{"pid": id}).Exist(new(Branch))
		if err != nil {
			g.Log().Errorf("查询【部门机构】是否可以删除，错误：%v", err)
			return errors.New("获取删除内容失败")
		}
		if has {
			return errors.New("删除的【部门机构】中，存在子部门机构")
		}
	}
	db.Where(builder.In("id", ids))
	return nil
}

//修改之前调用，判断是否可修改，设置修改条件
func (this *Branch) EditWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	if this.Id == "" {
		return errors.New("请选择要修改的数据")
	}
	db.Where(builder.Eq{"id": this.Id})
	db.MustCols("pid")
	return nil
}

//查询一条数据条件
func (this *Branch) GetWhere(db *xorm.Session, loginUser *appModels.UserInfo, id string) error {
	db.Where(builder.Eq{"id": id})
	db.Select("branch_name")
	return nil
}

//查询列表条件、查询分页数据条数条件
func (this *Branch) ListWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	db.Asc("sort")
	return nil
}

//查询分页时条件
func (this *Branch) PaginateWhere(db *xorm.Session, loginUser *appModels.UserInfo) error {
	return nil

}
